package org.example;

public class AnonymousClassDemo {
    public static void main(String[] args) {

        /**
         * 注意匿名对象的Class是:org.example.AnonymousClassDemo$1
         * 注意匿名对象的"父类"Class是:org.example.MyThread
         *
         * 先父后子,先块后法:先(构造代码)块后(构造方)法
         */
        MyThread myThread = new MyThread("aaa") {

// 注意匿名类中不能覆写父类构造器.因为MyThread不是当前对象的Class类型
//不算为当前匿名类的构造器
//            public MyThread() {
//                System.out.println("匿名类MyThread无参构造执行了");
//            }

//            String name = "innerBBB";

            {
                System.out.println("(子类)匿名类MyThread的构造代码块执行了");
            }


//            static {
//                System.out.println("匿名类MyThread的构造代码块执行了");
//            }


            public MyThread genInstance() {
                System.out.println("匿名类MyThread无参构造执行了");
                return new MyThread();
            }

            @Override
            public void run() {
//                super.run();
                System.out.println("(子类)匿名类MyThread的run方法被调用----this.getClass():"+name + this.getClass().getName()
                        + "----this.getClass().getSuperclass():" + super.getClass().getSuperclass().getName());
            }
        };

        //上述的过程仅仅只是创建了一个匿名类对象.并且这个对象中覆写了父类MyThread中的run方法.
        //它并没有调用run方法.只有下面的代码调用了run方法,才会执行覆写的run方法.
//        myThread.run();//此时发生了多态调用
        System.out.println("-------------------------------------------------------------------------------");

        MyThread myThread1 = new MyThread("aaa");
//        myThread1.run();//此时不是多态调用
    }
}
